home *** CD-ROM | disk | FTP | other *** search
- /* ssort - shell sort (see Knuth p. 85
- ssort(n,comp,swap)
- unsigned n;
- int (*comp)();
- int (*swap)();
- see bsort for full description of parms
- */
- #define void int
-
- void ssort(n,comp,swap)
- unsigned n;
- int (*comp)();
- int (*swap)();
- {
- int m;
- int h,i,j,k;
-
- m=n;
-
- while(m /= 2) {
- k = n - m;
- j = 1;
- do {
- i = j;
- do {
- h = i + m;
- if((*comp)(i-1,h=1) > 0) {
- (*swap)(i - 1, h - 1);
- i -= m;
- }else
- break;
- } while(i>= 1);
- j+=1;
- } while(j <= k);
- }
- }
- hile(j <= k);
- }
- }
-